package com.jiuli;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.servlet.mvc.Controller;

@SpringBootApplication
@MapperScan(basePackages = "com.jiuli.mapper")
/**
 * 解释一下 exposeProxy= true的作用:通过 Spring AOP 提供对当前代理对象的访问，
 * 使得可以在业务逻辑中访问到当前的代理对象。
 * 你可以在方法执行时通过AopContext.currentProxy()获取当前的代理对象。
 */
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableAsync
public class MetaApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MetaApplication.class, args);
    }

    /**
     * 健康检测，检测系统是否可用，（心跳机制的来源）
     * @return
     */
    // controller包下配置的api优先级更高
    @Bean("/health")
    public Controller health() {
        return ((request, response) -> {
            System.out.println("我被访问了~！");
            response.getWriter().write("ok!");
            return null;
        });
    }
}